package hu.arguscab.ai;

/**
 *
 * @param <E> Edge által tárolt objektum
 * @param <N> Node által tárolt objektum
 * @author sharp
 */
public interface Tree<E, N> extends Graph<E, N>{


	/**
	 * 
	 * @param node
	 * @return
	 */
	Node<N> getParent(Node<N> node);

	/**
	 * @param n
	 * @return igaz, ha a node-nak gyermeke
	 */
	boolean hasChild(Node<N> n);

	/**
	 *
	 * @param node
	 * @return
	 */
	Iterable<Node<N>> childs(Node<N> node);

	/**
	 *
	 * @return
	 */
	Iterable<Node<N>> depthSearchIterator();

	/**
	 *
	 * @return
	 */
	Iterable<Node<N>> breathSearchIterator();
	
	/**
	 *
	 * @return
	 */
	Iterable<Node<N>> leafFirstIterator();

	/**
	 *
	 * @return
	 */
	void clear();
}